import axios from 'axios';
import Vue from 'vue';

// 创建 axios 实例
const reqapi = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 15000
});

// 添加请求拦截器
reqapi.interceptors.request.use(function (config) {
  const manage_blogs_token = localStorage.getItem('manage_blogs_token'); // 获取存储在本地的 token
  if (manage_blogs_token && shouldAddToken(config)) {
    config.headers['Authorization'] = 'Bearer ' + manage_blogs_token; // 添加 Authorization 头部
  }



  return config; // 返回 config 对象
}, function (error) {
  return Promise.reject(error);
});

// 添加响应拦截器
reqapi.interceptors.response.use(function (response) {
    // 解析数据
  return response.data;
}, function (error) {
  // 对响应错误做处理
  return Promise.reject(error);
});

// 需要添加 token 的路由列表
const RouterList = [
];

// 判断是否需要添加 token
const shouldAddToken = (config) => {
  return RouterList.some(route => config.url.includes(route));
};

// 封装 GET 请求方法
const getapi = (url, params) => {
  return reqapi.get(url, { params });
};

// 封装 POST 请求方法
const postapi = (url, data, type = 'json') => {
  let headers;
  if (type === 'form') {
    headers = { 'Content-Type': 'multipart/form-data' };
  } else {
    headers = { 'Content-Type': 'application/json' };
  }
  return reqapi.post(url, data, { headers });
};

// 封装 DELETE 请求方法
const deleteapi = (url, params) => {
  return reqapi.delete(url, { params });
};

// 封装 PUT 请求方法，默认类型为 json
const putapi = (url, data, type = 'json') => {
  let headers;
  if (type === 'form') {
    headers = { 'Content-Type': 'multipart/form-data' };
  } else {
    headers = { 'Content-Type': 'application/json' };
  }
  return reqapi.put(url, data, { headers });
};

// 挂载到 Vue 实例的原型上，使其成为全局可用的方法
Vue.prototype.$getapi = getapi;
Vue.prototype.$postapi = postapi;
Vue.prototype.$deleteapi = deleteapi;
Vue.prototype.$putapi = putapi;